/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * Parameters
 * @class
 */
class ConfigParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ParameterName = null;

        /**
         * Value.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ParameterValue = null;

        /**
         * Value before modification.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ParameterOldValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ParameterName = 'ParameterName' in params ? params.ParameterName : null;
        this.ParameterValue = 'ParameterValue' in params ? params.ParameterValue : null;
        this.ParameterOldValue = 'ParameterOldValue' in params ? params.ParameterOldValue : null;

    }
}

/**
 * ModifyInstance response structure.
 * @class
 */
class ModifyInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstanceInfo request structure.
 * @class
 */
class DescribeInstanceInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DescribeUserHbaConfig response structure.
 * @class
 */
class DescribeUserHbaConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of instances.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Hba Config array.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<HbaConfig> || null}
         */
        this.HbaConfigs = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.HbaConfigs) {
            this.HbaConfigs = new Array();
            for (let z in params.HbaConfigs) {
                let obj = new HbaConfig();
                obj.deserialize(params.HbaConfigs[z]);
                this.HbaConfigs.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Access information.
 * @class
 */
class AccessInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Address.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Address = null;

        /**
         * Protocol.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Protocol = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Address = 'Address' in params ? params.Address : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;

    }
}

/**
 * DescribeUserHbaConfig request structure.
 * @class
 */
class DescribeUserHbaConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * ModifyDBParameters response structure.
 * @class
 */
class ModifyDBParametersResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Asynchronous process ID.
         * @type {number || null}
         */
        this.TaskId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Instance State Information
 * @class
 */
class InstanceStateInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance status. Example: serving.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceState = null;

        /**
         * Creation time of instance operation.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowCreateTime = null;

        /**
         * Instance operation name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowName = null;

        /**
         * Instance operation progress.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.FlowProgress = null;

        /**
         * Instance status description. Example: running.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceStateDesc = null;

        /**
         * Instance process error messages. Example: "Creation failed, insufficient resources."
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowMsg = null;

        /**
         * The name of the current step. Example: "Purchasing resources."
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProcessName = null;

        /**
         * Indicates whether there is a backup task in the instance. 1 indicates yes and 0 indicates no.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BackupStatus = null;

        /**
         * Request ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RequestId = null;

        /**
         * Indicates whether there is a backup task in the cluster. 1 indicates yes and 0 indicates no.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BackupOpenStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceState = 'InstanceState' in params ? params.InstanceState : null;
        this.FlowCreateTime = 'FlowCreateTime' in params ? params.FlowCreateTime : null;
        this.FlowName = 'FlowName' in params ? params.FlowName : null;
        this.FlowProgress = 'FlowProgress' in params ? params.FlowProgress : null;
        this.InstanceStateDesc = 'InstanceStateDesc' in params ? params.InstanceStateDesc : null;
        this.FlowMsg = 'FlowMsg' in params ? params.FlowMsg : null;
        this.ProcessName = 'ProcessName' in params ? params.ProcessName : null;
        this.BackupStatus = 'BackupStatus' in params ? params.BackupStatus : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;
        this.BackupOpenStatus = 'BackupOpenStatus' in params ? params.BackupOpenStatus : null;

    }
}

/**
 * Slow query item information
 * @class
 */
class NormQueryItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of calls.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CallTimes = null;

        /**
         * Number of read-only shared memory blocks.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SharedReadBlocks = null;

        /**
         * Number of write-only shared memory blocks.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.SharedWriteBlocks = null;

        /**
         * Database.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DatabaseName = null;

        /**
         * Statement after masking.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NormalQuery = null;

        /**
         * The statement with the longest execution time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MaxElapsedQuery = null;

        /**
         * Total consumption time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CostTime = null;

        /**
         * Client IP address.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ClientIp = null;

        /**
         * Username.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Proportion of total count.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCallTimesPercent = null;

        /**
         * Proportion of total consumption time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCostTimePercent = null;

        /**
         * Minimum consumption time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MinCostTime = null;

        /**
         * Maximum consumption time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxCostTime = null;

        /**
         * Time of the earliest item.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FirstTime = null;

        /**
         * Time of the latest item.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastTime = null;

        /**
         * Total consumption time of I/O reading.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ReadCostTime = null;

        /**
         * Total consumption time I/O writing.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.WriteCostTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CallTimes = 'CallTimes' in params ? params.CallTimes : null;
        this.SharedReadBlocks = 'SharedReadBlocks' in params ? params.SharedReadBlocks : null;
        this.SharedWriteBlocks = 'SharedWriteBlocks' in params ? params.SharedWriteBlocks : null;
        this.DatabaseName = 'DatabaseName' in params ? params.DatabaseName : null;
        this.NormalQuery = 'NormalQuery' in params ? params.NormalQuery : null;
        this.MaxElapsedQuery = 'MaxElapsedQuery' in params ? params.MaxElapsedQuery : null;
        this.CostTime = 'CostTime' in params ? params.CostTime : null;
        this.ClientIp = 'ClientIp' in params ? params.ClientIp : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.TotalCallTimesPercent = 'TotalCallTimesPercent' in params ? params.TotalCallTimesPercent : null;
        this.TotalCostTimePercent = 'TotalCostTimePercent' in params ? params.TotalCostTimePercent : null;
        this.MinCostTime = 'MinCostTime' in params ? params.MinCostTime : null;
        this.MaxCostTime = 'MaxCostTime' in params ? params.MaxCostTime : null;
        this.FirstTime = 'FirstTime' in params ? params.FirstTime : null;
        this.LastTime = 'LastTime' in params ? params.LastTime : null;
        this.ReadCostTime = 'ReadCostTime' in params ? params.ReadCostTime : null;
        this.WriteCostTime = 'WriteCostTime' in params ? params.WriteCostTime : null;

    }
}

/**
 * DescribeInstanceState request structure.
 * @class
 */
class DescribeInstanceStateRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         *  InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Description of the account name and instance IDs under the account
 * @class
 */
class AccountInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Account name.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Account attribute.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Perms = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.Perms = 'Perms' in params ? params.Perms : null;

    }
}

/**
 * DescribeAccounts request structure.
 * @class
 */
class DescribeAccountsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Offset. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Limit.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * ScaleOutInstance response structure.
 * @class
 */
class ScaleOutInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * FlowId.
         * @type {string || null}
         */
        this.FlowId = null;

        /**
         * Error message.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstanceNodes request structure.
 * @class
 */
class DescribeInstanceNodesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * RestartInstance response structure.
 * @class
 */
class RestartInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * FlowId.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Error message.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Billing time parameter.
 * @class
 */
class ChargeProperties extends  AbstractModel {
    constructor(){
        super();

        /**
         * 1: requires auto-renewal.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Order time range.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Time unit. Valid values: h and m.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Billing type: 0 indicates pay-as-you-go and 1 indicates monthly subscription.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * PREPAID and POSTPAID_BY_HOUR
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ChargeType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;

    }
}

/**
 * DestroyInstanceByApi request structure.
 * @class
 */
class DestroyInstanceByApiRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance id. Example: "cdwpg-xxxx".
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Upgrade information
 * @class
 */
class UpgradeItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task name.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TaskName = null;

        /**
         * Original kernel version.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SourceVersion = null;

        /**
         * Target kernel version.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TargetVersion = null;

        /**
         * Task creation time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Task end time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Task completion status.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Operator.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.OperateUin = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskName = 'TaskName' in params ? params.TaskName : null;
        this.SourceVersion = 'SourceVersion' in params ? params.SourceVersion : null;
        this.TargetVersion = 'TargetVersion' in params ? params.TargetVersion : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.OperateUin = 'OperateUin' in params ? params.OperateUin : null;

    }
}

/**
 * DescribeDBConfigHistory response structure.
 * @class
 */
class DescribeDBConfigHistoryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total count.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * DBConfig history.
         * @type {Array.<ConfigHistory> || null}
         */
        this.ConfigHistory = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ConfigHistory) {
            this.ConfigHistory = new Array();
            for (let z in params.ConfigHistory) {
                let obj = new ConfigHistory();
                obj.deserialize(params.ConfigHistory[z]);
                this.ConfigHistory.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Resource specifications.
 * @class
 */
class ResourceSpecNew extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource name.
         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Resource count.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Disk information.
         * @type {CBSSpec || null}
         */
        this.DiskSpec = null;

        /**
         * Resource type, DATA.
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SpecName = 'SpecName' in params ? params.SpecName : null;
        this.Count = 'Count' in params ? params.Count : null;

        if (params.DiskSpec) {
            let obj = new CBSSpec();
            obj.deserialize(params.DiskSpec)
            this.DiskSpec = obj;
        }
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * Instance node
 * @class
 */
class InstanceNode extends  AbstractModel {
    constructor(){
        super();

        /**
         * id
         * @type {number || null}
         */
        this.NodeId = null;

        /**
         * cn
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * ip
         * @type {string || null}
         */
        this.NodeIp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NodeId = 'NodeId' in params ? params.NodeId : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.NodeIp = 'NodeIp' in params ? params.NodeIp : null;

    }
}

/**
 * DescribeDBConfigHistory request structure.
 * @class
 */
class DescribeDBConfigHistoryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Limit.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * Error log details
 * @class
 */
class ErrorLogDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Username.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Database.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Database = null;

        /**
         * The time an error was reported.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorTime = null;

        /**
         * Error message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMessage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.Database = 'Database' in params ? params.Database : null;
        this.ErrorTime = 'ErrorTime' in params ? params.ErrorTime : null;
        this.ErrorMessage = 'ErrorMessage' in params ? params.ErrorMessage : null;

    }
}

/**
 * DescribeDBParams request structure.
 * @class
 */
class DescribeDBParamsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * cn/dn
         * @type {Array.<string> || null}
         */
        this.NodeTypes = null;

        /**
         * Limit.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NodeTypes = 'NodeTypes' in params ? params.NodeTypes : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Disk specifications.
 * @class
 */
class CBSSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Disk type.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Size.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Number.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DiskCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.DiskCount = 'DiskCount' in params ? params.DiskCount : null;

    }
}

/**
 * DescribeInstanceNodes response structure.
 * @class
 */
class DescribeInstanceNodesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * error msg
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * Node list.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<InstanceNode> || null}
         */
        this.InstanceNodes = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;

        if (params.InstanceNodes) {
            this.InstanceNodes = new Array();
            for (let z in params.InstanceNodes) {
                let obj = new InstanceNode();
                obj.deserialize(params.InstanceNodes[z]);
                this.InstanceNodes.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstance request structure.
 * @class
 */
class ModifyInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Name of the newly modified instance.
         * @type {string || null}
         */
        this.InstanceName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;

    }
}

/**
 * DescribeSimpleInstances response structure.
 * @class
 */
class DescribeSimpleInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total count of instance lists.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Instance list details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<InstanceSimpleInfoNew> || null}
         */
        this.InstancesList = null;

        /**
         * Error message.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.InstancesList) {
            this.InstancesList = new Array();
            for (let z in params.InstancesList) {
                let obj = new InstanceSimpleInfoNew();
                obj.deserialize(params.InstancesList[z]);
                this.InstancesList.push(obj);
            }
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpgradeInstance request structure.
 * @class
 */
class UpgradeInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Installation package version.
         * @type {string || null}
         */
        this.PackageVersion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PackageVersion = 'PackageVersion' in params ? params.PackageVersion : null;

    }
}

/**
 * DescribeSlowLog response structure.
 * @class
 */
class DescribeSlowLogResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total count of messages returned.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Slow SQL log details.
         * @type {SlowLogDetail || null}
         */
        this.SlowLogDetails = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.SlowLogDetails) {
            let obj = new SlowLogDetail();
            obj.deserialize(params.SlowLogDetails)
            this.SlowLogDetails = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUserHba response structure.
 * @class
 */
class ModifyUserHbaResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TaskId = null;

        /**
         * Error message.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Node parameter
 * @class
 */
class NodeConfigParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node type.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Parameter.
         * @type {Array.<ConfigParams> || null}
         */
        this.ConfigParams = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NodeType = 'NodeType' in params ? params.NodeType : null;

        if (params.ConfigParams) {
            this.ConfigParams = new Array();
            for (let z in params.ConfigParams) {
                let obj = new ConfigParams();
                obj.deserialize(params.ConfigParams[z]);
                this.ConfigParams.push(obj);
            }
        }

    }
}

/**
 * instance information.
 * @class
 */
class InstanceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID 
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ID = null;

        /**
         * Kernel version type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Cluster name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Cluster status.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Cluster status details.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StatusDesc = null;

        /**
         * Cluster status information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InstanceStateInfo || null}
         */
        this.InstanceStateInfo = null;

        /**
         * Cluster ID.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * Creation time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Region.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Region.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Region details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RegionDesc = null;

        /**
         * Region details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ZoneDesc = null;

        /**
         * Tag.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Kernel version.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Character set.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Charset = null;

        /**
         * CN node list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<InstanceNodeGroup> || null}
         */
        this.CNNodes = null;

        /**
         * DN node list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<InstanceNodeGroup> || null}
         */
        this.DNNodes = null;

        /**
         * Region ID.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Region ID.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * Virtual Private Cloud (VPC).

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Expiration time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Billing mode.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PayMode = null;

        /**
         * Automatic renewal.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.RenewFlag = null;

        /**
         * Cluster ID.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Access information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<AccessInfo> || null}
         */
        this.AccessDetails = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ID = 'ID' in params ? params.ID : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.StatusDesc = 'StatusDesc' in params ? params.StatusDesc : null;

        if (params.InstanceStateInfo) {
            let obj = new InstanceStateInfo();
            obj.deserialize(params.InstanceStateInfo)
            this.InstanceStateInfo = obj;
        }
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.RegionDesc = 'RegionDesc' in params ? params.RegionDesc : null;
        this.ZoneDesc = 'ZoneDesc' in params ? params.ZoneDesc : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.Version = 'Version' in params ? params.Version : null;
        this.Charset = 'Charset' in params ? params.Charset : null;

        if (params.CNNodes) {
            this.CNNodes = new Array();
            for (let z in params.CNNodes) {
                let obj = new InstanceNodeGroup();
                obj.deserialize(params.CNNodes[z]);
                this.CNNodes.push(obj);
            }
        }

        if (params.DNNodes) {
            this.DNNodes = new Array();
            for (let z in params.DNNodes) {
                let obj = new InstanceNodeGroup();
                obj.deserialize(params.DNNodes[z]);
                this.DNNodes.push(obj);
            }
        }
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.AccessDetails) {
            this.AccessDetails = new Array();
            for (let z in params.AccessDetails) {
                let obj = new AccessInfo();
                obj.deserialize(params.AccessDetails[z]);
                this.AccessDetails.push(obj);
            }
        }

    }
}

/**
 * DescribeDBParams response structure.
 * @class
 */
class DescribeDBParamsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total count.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Parameters information.
         * @type {Array.<ParamItem> || null}
         */
        this.Items = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Items) {
            this.Items = new Array();
            for (let z in params.Items) {
                let obj = new ParamItem();
                obj.deserialize(params.Items[z]);
                this.Items.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ParamDetail
 * @class
 */
class ParamDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Parameter name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ParamName = null;

        /**
         * Default value.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DefaultValue = null;

        /**
         * Indicates whether the restart is required.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.NeedRestart = null;

        /**
         * Current value.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RunningValue = null;

        /**
         * Value range.
         * @type {ValueRange || null}
         */
        this.ValueRange = null;

        /**
         * Unit.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Unit = null;

        /**
         * Introduction in English.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ShortDesc = null;

        /**
         * Parameter name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ParameterName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ParamName = 'ParamName' in params ? params.ParamName : null;
        this.DefaultValue = 'DefaultValue' in params ? params.DefaultValue : null;
        this.NeedRestart = 'NeedRestart' in params ? params.NeedRestart : null;
        this.RunningValue = 'RunningValue' in params ? params.RunningValue : null;

        if (params.ValueRange) {
            let obj = new ValueRange();
            obj.deserialize(params.ValueRange)
            this.ValueRange = obj;
        }
        this.Unit = 'Unit' in params ? params.Unit : null;
        this.ShortDesc = 'ShortDesc' in params ? params.ShortDesc : null;
        this.ParameterName = 'ParameterName' in params ? params.ParameterName : null;

    }
}

/**
 * DescribeInstances response structure.
 * @class
 */
class DescribeInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total count of instances.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Instance array.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<InstanceInfo> || null}
         */
        this.InstancesList = null;

        /**
         * Error message.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.InstancesList) {
            this.InstancesList = new Array();
            for (let z in params.InstancesList) {
                let obj = new InstanceInfo();
                obj.deserialize(params.InstancesList[z]);
                this.InstancesList.push(obj);
            }
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ConfigHistory1
 * @class
 */
class ConfigHistory extends  AbstractModel {
    constructor(){
        super();

        /**
         * id
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Instance name.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Creation time.


         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Update time.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * dn/cn
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Parameter name.
         * @type {string || null}
         */
        this.ParamName = null;

        /**
         * New parameter value.
         * @type {string || null}
         */
        this.ParamNewValue = null;

        /**
         * Old parameter value.
         * @type {string || null}
         */
        this.ParamOldValue = null;

        /**
         * Status. Valid values: doing and success.
         * @type {string || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.ParamName = 'ParamName' in params ? params.ParamName : null;
        this.ParamNewValue = 'ParamNewValue' in params ? params.ParamNewValue : null;
        this.ParamOldValue = 'ParamOldValue' in params ? params.ParamOldValue : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * ResetAccountPassword response structure.
 * @class
 */
class ResetAccountPasswordResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error message.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Disk specifications.
 * @class
 */
class DiskSpecPlus extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of disks.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DiskCount = null;

        /**
         * Maximum disk capacity.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxDiskSize = null;

        /**
         * Minimum disk capacity.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MinDiskSize = null;

        /**
         * Disk type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Disk type details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DiskDesc = null;

        /**
         * Model type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CvmClass = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskCount = 'DiskCount' in params ? params.DiskCount : null;
        this.MaxDiskSize = 'MaxDiskSize' in params ? params.MaxDiskSize : null;
        this.MinDiskSize = 'MinDiskSize' in params ? params.MinDiskSize : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskDesc = 'DiskDesc' in params ? params.DiskDesc : null;
        this.CvmClass = 'CvmClass' in params ? params.CvmClass : null;

    }
}

/**
 * ResetAccountPassword request structure.
 * @class
 */
class ResetAccountPasswordRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instanceid.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The username to be modified.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * New password.
         * @type {string || null}
         */
        this.NewPassword = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.NewPassword = 'NewPassword' in params ? params.NewPassword : null;

    }
}

/**
 * RestartInstance request structure.
 * @class
 */
class RestartInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance name. Example: cdwpg-xxxx.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Types of node that need to restart. Valid values: gtm, cn, dn and fn.
         * @type {Array.<string> || null}
         */
        this.NodeTypes = null;

        /**
         * Specifies th ID of nodes that need to restart.
         * @type {Array.<string> || null}
         */
        this.NodeIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.NodeTypes = 'NodeTypes' in params ? params.NodeTypes : null;
        this.NodeIds = 'NodeIds' in params ? params.NodeIds : null;

    }
}

/**
 * DescribeUpgradeList request structure.
 * @class
 */
class DescribeUpgradeListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Limit.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * Resource information.
 * @class
 */
class ResourceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resource name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Resource count.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Disk information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {CBSSpecInfo || null}
         */
        this.DiskSpec = null;

        /**
         * Node type. Valid values: cn and dn.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SpecName = 'SpecName' in params ? params.SpecName : null;
        this.Count = 'Count' in params ? params.Count : null;

        if (params.DiskSpec) {
            let obj = new CBSSpecInfo();
            obj.deserialize(params.DiskSpec)
            this.DiskSpec = obj;
        }
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * DescribeInstances request structure.
 * @class
 */
class DescribeInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Searches by instance ID.
         * @type {string || null}
         */
        this.SearchInstanceId = null;

        /**
         * Searches by instance name.
         * @type {string || null}
         */
        this.SearchInstanceName = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Limit.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Searched tag list.
         * @type {Array.<SearchTags> || null}
         */
        this.SearchTags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SearchInstanceId = 'SearchInstanceId' in params ? params.SearchInstanceId : null;
        this.SearchInstanceName = 'SearchInstanceName' in params ? params.SearchInstanceName : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.SearchTags) {
            this.SearchTags = new Array();
            for (let z in params.SearchTags) {
                let obj = new SearchTags();
                obj.deserialize(params.SearchTags[z]);
                this.SearchTags.push(obj);
            }
        }

    }
}

/**
 * UpgradeInstance response structure.
 * @class
 */
class UpgradeInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * FlowId.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Error message.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstanceOperations response structure.
 * @class
 */
class DescribeInstanceOperationsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total count of operation records.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * operation records.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<InstanceOperation> || null}
         */
        this.Operations = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Operations) {
            this.Operations = new Array();
            for (let z in params.Operations) {
                let obj = new InstanceOperation();
                obj.deserialize(params.Operations[z]);
                this.Operations.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateInstanceByApi response structure.
 * @class
 */
class CreateInstanceByApiResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process ID.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowId = null;

        /**
         * Instance ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Error message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSlowLog request structure.
 * @class
 */
class DescribeSlowLogRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Limit.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Database.
         * @type {string || null}
         */
        this.Database = null;

        /**
         * Sorting method.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * Ascending or descending order.
         * @type {string || null}
         */
        this.OrderByType = null;

        /**
         * Duration.
         * @type {number || null}
         */
        this.Duration = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Database = 'Database' in params ? params.Database : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.OrderByType = 'OrderByType' in params ? params.OrderByType : null;
        this.Duration = 'Duration' in params ? params.Duration : null;

    }
}

/**
 * DescribeUpgradeList response structure.
 * @class
 */
class DescribeUpgradeListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Details of instance upgrade records.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<UpgradeItem> || null}
         */
        this.UpgradeItems = null;

        /**
         * Total count of upgrade records.
         * @type {string || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.UpgradeItems) {
            this.UpgradeItems = new Array();
            for (let z in params.UpgradeItems) {
                let obj = new UpgradeItem();
                obj.deserialize(params.UpgradeItems[z]);
                this.UpgradeItems.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ScaleOutInstance request structure.
 * @class
 */
class ScaleOutInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Node type.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Number of scale-out nodes.
         * @type {number || null}
         */
        this.ScaleOutCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.ScaleOutCount = 'ScaleOutCount' in params ? params.ScaleOutCount : null;

    }
}

/**
 * DescribeAccounts response structure.
 * @class
 */
class DescribeAccountsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of instances.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Account array.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<AccountInfo> || null}
         */
        this.Accounts = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Accounts) {
            this.Accounts = new Array();
            for (let z in params.Accounts) {
                let obj = new AccountInfo();
                obj.deserialize(params.Accounts[z]);
                this.Accounts.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * List of tags searched on the list page.
 * @class
 */
class SearchTags extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key.
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Tag value.
         * @type {string || null}
         */
        this.TagValue = null;

        /**
         * 1 means only the Tag key is entered without a value, and 0 means both the key and the value are entered.
         * @type {number || null}
         */
        this.AllValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.TagValue = 'TagValue' in params ? params.TagValue : null;
        this.AllValue = 'AllValue' in params ? params.AllValue : null;

    }
}

/**
 * Range
 * @class
 */
class Range extends  AbstractModel {
    constructor(){
        super();

        /**
         * Minimum value.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Min = null;

        /**
         * Maximum value.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Max = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Min = 'Min' in params ? params.Min : null;
        this.Max = 'Max' in params ? params.Max : null;

    }
}

/**
 * Instance node information.
 * @class
 */
class InstanceNodeGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * Model.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Disk information.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DiskSpecPlus || null}
         */
        this.DataDisk = null;

        /**
         * Number of machines.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CvmCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SpecName = 'SpecName' in params ? params.SpecName : null;

        if (params.DataDisk) {
            let obj = new DiskSpecPlus();
            obj.deserialize(params.DataDisk)
            this.DataDisk = obj;
        }
        this.CvmCount = 'CvmCount' in params ? params.CvmCount : null;

    }
}

/**
 * DescribeInstance response structure.
 * @class
 */
class DescribeInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance description information.
         * @type {InstanceInfo || null}
         */
        this.InstanceInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.InstanceInfo) {
            let obj = new InstanceInfo();
            obj.deserialize(params.InstanceInfo)
            this.InstanceInfo = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDBParameters request structure.
 * @class
 */
class ModifyDBParametersRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Node parameter.
         * @type {Array.<NodeConfigParams> || null}
         */
        this.NodeConfigParams = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.NodeConfigParams) {
            this.NodeConfigParams = new Array();
            for (let z in params.NodeConfigParams) {
                let obj = new NodeConfigParams();
                obj.deserialize(params.NodeConfigParams[z]);
                this.NodeConfigParams.push(obj);
            }
        }

    }
}

/**
 * DescribeErrorLog response structure.
 * @class
 */
class DescribeErrorLogResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total count of messages returned.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Error log details.
         * @type {Array.<ErrorLogDetail> || null}
         */
        this.ErrorLogDetails = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ErrorLogDetails) {
            this.ErrorLogDetails = new Array();
            for (let z in params.ErrorLogDetails) {
                let obj = new ErrorLogDetail();
                obj.deserialize(params.ErrorLogDetails[z]);
                this.ErrorLogDetails.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUserHba request structure.
 * @class
 */
class ModifyUserHbaRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Hba array.
         * @type {Array.<HbaConfig> || null}
         */
        this.HbaConfigs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.HbaConfigs) {
            this.HbaConfigs = new Array();
            for (let z in params.HbaConfigs) {
                let obj = new HbaConfig();
                obj.deserialize(params.HbaConfigs[z]);
                this.HbaConfigs.push(obj);
            }
        }

    }
}

/**
 * ScaleUpInstance request structure.
 * @class
 */
class ScaleUpInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Modifies the resource type.
         * @type {string || null}
         */
        this.Case = null;

        /**
         * Modified parameters.
         * @type {CNResourceSpec || null}
         */
        this.ModifySpec = null;

        /**
         * Instance name.
         * @type {string || null}
         */
        this.InstanceName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Case = 'Case' in params ? params.Case : null;

        if (params.ModifySpec) {
            let obj = new CNResourceSpec();
            obj.deserialize(params.ModifySpec)
            this.ModifySpec = obj;
        }
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;

    }
}

/**
 * Description of resource specifications
 * @class
 */
class CNResourceSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node type.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Model.


         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Number of nodes.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Disk information.
         * @type {CBSSpec || null}
         */
        this.DiskSpec = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.SpecName = 'SpecName' in params ? params.SpecName : null;
        this.Count = 'Count' in params ? params.Count : null;

        if (params.DiskSpec) {
            let obj = new CBSSpec();
            obj.deserialize(params.DiskSpec)
            this.DiskSpec = obj;
        }

    }
}

/**
 * DestroyInstanceByApi response structure.
 * @class
 */
class DestroyInstanceByApiResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Destroy  process ID.
         * @type {string || null}
         */
        this.FlowId = null;

        /**
         * Error message.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ParamItem information
 * @class
 */
class ParamItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node type. Valid values: cn and dn.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Node name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NodeName = null;

        /**
         * Number of parameters.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Parameter information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ParamDetail> || null}
         */
        this.Details = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.NodeName = 'NodeName' in params ? params.NodeName : null;
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Details) {
            this.Details = new Array();
            for (let z in params.Details) {
                let obj = new ParamDetail();
                obj.deserialize(params.Details[z]);
                this.Details.push(obj);
            }
        }

    }
}

/**
 * Disk information.
 * @class
 */
class CBSSpecInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Disk type.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Size.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Number.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DiskCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.DiskCount = 'DiskCount' in params ? params.DiskCount : null;

    }
}

/**
 * user_config
 * @class
 */
class HbaConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Type.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Database.
         * @type {string || null}
         */
        this.Database = null;

        /**
         * User.
         * @type {string || null}
         */
        this.User = null;

        /**
         * IP address.
         * @type {string || null}
         */
        this.Address = null;

        /**
         * Method.
         * @type {string || null}
         */
        this.Method = null;

        /**
         * Indicates whether to perform overwriting.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Mask = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.Database = 'Database' in params ? params.Database : null;
        this.User = 'User' in params ? params.User : null;
        this.Address = 'Address' in params ? params.Address : null;
        this.Method = 'Method' in params ? params.Method : null;
        this.Mask = 'Mask' in params ? params.Mask : null;

    }
}

/**
 * Cluster information.
 * @class
 */
class SimpleInstanceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ID = null;

        /**
         * Cluster ID.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Cluster name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Kernel version.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Region.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Region.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Virtual Private Cloud (VPC).

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserVPCID = null;

        /**
         * Subnet.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserSubnetID = null;

        /**
         * Start time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Expiration time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Access address.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AccessInfo = null;

        /**
         * Automatic renewal switch. 0 indicates automatic renewal is not enabled, and 1 indicates automatic renewal is enabled.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Billing mode.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ChargeProperties || null}
         */
        this.ChargeProperties = null;

        /**
         * Resource collection.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ResourceInfo> || null}
         */
        this.Resources = null;

        /**
         * Tag list.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Cluster status.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ID = 'ID' in params ? params.ID : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Version = 'Version' in params ? params.Version : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.UserVPCID = 'UserVPCID' in params ? params.UserVPCID : null;
        this.UserSubnetID = 'UserSubnetID' in params ? params.UserSubnetID : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.AccessInfo = 'AccessInfo' in params ? params.AccessInfo : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

        if (params.ChargeProperties) {
            let obj = new ChargeProperties();
            obj.deserialize(params.ChargeProperties)
            this.ChargeProperties = obj;
        }

        if (params.Resources) {
            this.Resources = new Array();
            for (let z in params.Resources) {
                let obj = new ResourceInfo();
                obj.deserialize(params.Resources[z]);
                this.Resources.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * CreateInstanceByApi request structure.
 * @class
 */
class CreateInstanceByApiRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance name.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Availability zone.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Virtual Private Cloud (VPC).
         * @type {string || null}
         */
        this.UserVPCId = null;

        /**
         * Subnet.
         * @type {string || null}
         */
        this.UserSubnetId = null;

        /**
         * Billing method.
         * @type {ChargeProperties || null}
         */
        this.ChargeProperties = null;

        /**
         * Instance password.
         * @type {string || null}
         */
        this.AdminPassword = null;

        /**
         * Resource information.
         * @type {Array.<ResourceSpecNew> || null}
         */
        this.Resources = null;

        /**
         * Tag list.Deprecated, use TagItems.
         * @type {Tag || null}
         */
        this.Tags = null;

        /**
         * Version.
         * @type {string || null}
         */
        this.ProductVersion = null;

        /**
         *  TagItems list.
         * @type {Array.<Tag> || null}
         */
        this.TagItems = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.UserVPCId = 'UserVPCId' in params ? params.UserVPCId : null;
        this.UserSubnetId = 'UserSubnetId' in params ? params.UserSubnetId : null;

        if (params.ChargeProperties) {
            let obj = new ChargeProperties();
            obj.deserialize(params.ChargeProperties)
            this.ChargeProperties = obj;
        }
        this.AdminPassword = 'AdminPassword' in params ? params.AdminPassword : null;

        if (params.Resources) {
            this.Resources = new Array();
            for (let z in params.Resources) {
                let obj = new ResourceSpecNew();
                obj.deserialize(params.Resources[z]);
                this.Resources.push(obj);
            }
        }

        if (params.Tags) {
            let obj = new Tag();
            obj.deserialize(params.Tags)
            this.Tags = obj;
        }
        this.ProductVersion = 'ProductVersion' in params ? params.ProductVersion : null;

        if (params.TagItems) {
            this.TagItems = new Array();
            for (let z in params.TagItems) {
                let obj = new Tag();
                obj.deserialize(params.TagItems[z]);
                this.TagItems.push(obj);
            }
        }

    }
}

/**
 * DescribeInstanceOperations request structure.
 * @class
 */
class DescribeInstanceOperationsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * InstanceId.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Limit.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Start time.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time.
         * @type {string || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * DescribeInstance request structure.
 * @class
 */
class DescribeInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Slow SQL logs
 * @class
 */
class SlowLogDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total consumption time.
         * @type {number || null}
         */
        this.TotalTime = null;

        /**
         * Total number of calls.
         * @type {number || null}
         */
        this.TotalCallTimes = null;

        /**
         * Slow SQL.
         * @type {Array.<NormQueryItem> || null}
         */
        this.NormalQuerys = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalTime = 'TotalTime' in params ? params.TotalTime : null;
        this.TotalCallTimes = 'TotalCallTimes' in params ? params.TotalCallTimes : null;

        if (params.NormalQuerys) {
            this.NormalQuerys = new Array();
            for (let z in params.NormalQuerys) {
                let obj = new NormQueryItem();
                obj.deserialize(params.NormalQuerys[z]);
                this.NormalQuerys.push(obj);
            }
        }

    }
}

/**
 * ValueRange
 * @class
 */
class ValueRange extends  AbstractModel {
    constructor(){
        super();

        /**
         * Parameter types. Valid values: enum, string, and section. Enum indicates enumeration, namely utf8, latin1, gbk. String indicates that the returned parameter value is a string. Section indicates that the returned parameter value is a value range, for example, 4-8.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Response parameter when the type is a section.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Range || null}
         */
        this.Range = null;

        /**
         * Response parameter when the type is an enum.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Enum = null;

        /**
         * Response parameter when the type is a string.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.String = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;

        if (params.Range) {
            let obj = new Range();
            obj.deserialize(params.Range)
            this.Range = obj;
        }
        this.Enum = 'Enum' in params ? params.Enum : null;
        this.String = 'String' in params ? params.String : null;

    }
}

/**
 * Tag description.
 * @class
 */
class Tag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key.
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Tag value.
         * @type {string || null}
         */
        this.TagValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.TagValue = 'TagValue' in params ? params.TagValue : null;

    }
}

/**
 * DescribeInstanceState response structure.
 * @class
 */
class DescribeInstanceStateResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance status. Example: serving.
         * @type {string || null}
         */
        this.InstanceState = null;

        /**
         * Creation time of instance operation.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowCreateTime = null;

        /**
         * Instance operation name.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowName = null;

        /**
         * Instance operation progress.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.FlowProgress = null;

        /**
         * Instance status description. Example: running.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceStateDesc = null;

        /**
         * Instance process error messages. Example: "Creation failed, insufficient resources."
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FlowMsg = null;

        /**
         * The name of the current step. Example: "Purchasing resources."Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProcessName = null;

        /**
         * Enabling status of the instance backup task.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BackupStatus = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceState = 'InstanceState' in params ? params.InstanceState : null;
        this.FlowCreateTime = 'FlowCreateTime' in params ? params.FlowCreateTime : null;
        this.FlowName = 'FlowName' in params ? params.FlowName : null;
        this.FlowProgress = 'FlowProgress' in params ? params.FlowProgress : null;
        this.InstanceStateDesc = 'InstanceStateDesc' in params ? params.InstanceStateDesc : null;
        this.FlowMsg = 'FlowMsg' in params ? params.FlowMsg : null;
        this.ProcessName = 'ProcessName' in params ? params.ProcessName : null;
        this.BackupStatus = 'BackupStatus' in params ? params.BackupStatus : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Cluster operation description
 * @class
 */
class InstanceOperation extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation name, such as create_instance, and scaleout_instance
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Cluster ID.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Operation name description, such as creating, and modifying the cluster name.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Action = null;

        /**
         * Status.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Operation start time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Operation end time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Operation context.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Context = null;

        /**
         * Operation update time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdateTime = null;

        /**
         * Operation UIN.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Uin = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Action = 'Action' in params ? params.Action : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Context = 'Context' in params ? params.Context : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;
        this.Uin = 'Uin' in params ? params.Uin : null;

    }
}

/**
 * Simplified instance information.
 * @class
 */
class InstanceSimpleInfoNew extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ID = null;

        /**
         * Cluster ID.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Cluster name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Kernel version.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Region.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Region ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Region details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RegionDesc = null;

        /**
         * Region.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Region ID.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * Region details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ZoneDesc = null;

        /**
         * Virtual Private Cloud (VPC).

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Start time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Expiration time.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Access address.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AccessInfo = null;

        /**
         * Billing mode.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PayMode = null;

        /**
         * Automatic renewal.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ID = 'ID' in params ? params.ID : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Version = 'Version' in params ? params.Version : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.RegionDesc = 'RegionDesc' in params ? params.RegionDesc : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.ZoneDesc = 'ZoneDesc' in params ? params.ZoneDesc : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.AccessInfo = 'AccessInfo' in params ? params.AccessInfo : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * DescribeSimpleInstances request structure.
 * @class
 */
class DescribeSimpleInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Searches by instance ID.
         * @type {string || null}
         */
        this.SearchInstanceId = null;

        /**
         * Searches by instance name.
         * @type {string || null}
         */
        this.SearchInstanceName = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Limit.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Searches by tag list.
         * @type {Array.<string> || null}
         */
        this.SearchTags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SearchInstanceId = 'SearchInstanceId' in params ? params.SearchInstanceId : null;
        this.SearchInstanceName = 'SearchInstanceName' in params ? params.SearchInstanceName : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.SearchTags = 'SearchTags' in params ? params.SearchTags : null;

    }
}

/**
 * DescribeErrorLog request structure.
 * @class
 */
class DescribeErrorLogRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Limit.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * ScaleUpInstance response structure.
 * @class
 */
class ScaleUpInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * FlowId.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Specific error.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstanceInfo response structure.
 * @class
 */
class DescribeInstanceInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance description information.
         * @type {SimpleInstanceInfo || null}
         */
        this.SimpleInstanceInfo = null;

        /**
         * Error message.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SimpleInstanceInfo) {
            let obj = new SimpleInstanceInfo();
            obj.deserialize(params.SimpleInstanceInfo)
            this.SimpleInstanceInfo = obj;
        }
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

module.exports = {
    ConfigParams: ConfigParams,
    ModifyInstanceResponse: ModifyInstanceResponse,
    DescribeInstanceInfoRequest: DescribeInstanceInfoRequest,
    DescribeUserHbaConfigResponse: DescribeUserHbaConfigResponse,
    AccessInfo: AccessInfo,
    DescribeUserHbaConfigRequest: DescribeUserHbaConfigRequest,
    ModifyDBParametersResponse: ModifyDBParametersResponse,
    InstanceStateInfo: InstanceStateInfo,
    NormQueryItem: NormQueryItem,
    DescribeInstanceStateRequest: DescribeInstanceStateRequest,
    AccountInfo: AccountInfo,
    DescribeAccountsRequest: DescribeAccountsRequest,
    ScaleOutInstanceResponse: ScaleOutInstanceResponse,
    DescribeInstanceNodesRequest: DescribeInstanceNodesRequest,
    RestartInstanceResponse: RestartInstanceResponse,
    ChargeProperties: ChargeProperties,
    DestroyInstanceByApiRequest: DestroyInstanceByApiRequest,
    UpgradeItem: UpgradeItem,
    DescribeDBConfigHistoryResponse: DescribeDBConfigHistoryResponse,
    ResourceSpecNew: ResourceSpecNew,
    InstanceNode: InstanceNode,
    DescribeDBConfigHistoryRequest: DescribeDBConfigHistoryRequest,
    ErrorLogDetail: ErrorLogDetail,
    DescribeDBParamsRequest: DescribeDBParamsRequest,
    CBSSpec: CBSSpec,
    DescribeInstanceNodesResponse: DescribeInstanceNodesResponse,
    ModifyInstanceRequest: ModifyInstanceRequest,
    DescribeSimpleInstancesResponse: DescribeSimpleInstancesResponse,
    UpgradeInstanceRequest: UpgradeInstanceRequest,
    DescribeSlowLogResponse: DescribeSlowLogResponse,
    ModifyUserHbaResponse: ModifyUserHbaResponse,
    NodeConfigParams: NodeConfigParams,
    InstanceInfo: InstanceInfo,
    DescribeDBParamsResponse: DescribeDBParamsResponse,
    ParamDetail: ParamDetail,
    DescribeInstancesResponse: DescribeInstancesResponse,
    ConfigHistory: ConfigHistory,
    ResetAccountPasswordResponse: ResetAccountPasswordResponse,
    DiskSpecPlus: DiskSpecPlus,
    ResetAccountPasswordRequest: ResetAccountPasswordRequest,
    RestartInstanceRequest: RestartInstanceRequest,
    DescribeUpgradeListRequest: DescribeUpgradeListRequest,
    ResourceInfo: ResourceInfo,
    DescribeInstancesRequest: DescribeInstancesRequest,
    UpgradeInstanceResponse: UpgradeInstanceResponse,
    DescribeInstanceOperationsResponse: DescribeInstanceOperationsResponse,
    CreateInstanceByApiResponse: CreateInstanceByApiResponse,
    DescribeSlowLogRequest: DescribeSlowLogRequest,
    DescribeUpgradeListResponse: DescribeUpgradeListResponse,
    ScaleOutInstanceRequest: ScaleOutInstanceRequest,
    DescribeAccountsResponse: DescribeAccountsResponse,
    SearchTags: SearchTags,
    Range: Range,
    InstanceNodeGroup: InstanceNodeGroup,
    DescribeInstanceResponse: DescribeInstanceResponse,
    ModifyDBParametersRequest: ModifyDBParametersRequest,
    DescribeErrorLogResponse: DescribeErrorLogResponse,
    ModifyUserHbaRequest: ModifyUserHbaRequest,
    ScaleUpInstanceRequest: ScaleUpInstanceRequest,
    CNResourceSpec: CNResourceSpec,
    DestroyInstanceByApiResponse: DestroyInstanceByApiResponse,
    ParamItem: ParamItem,
    CBSSpecInfo: CBSSpecInfo,
    HbaConfig: HbaConfig,
    SimpleInstanceInfo: SimpleInstanceInfo,
    CreateInstanceByApiRequest: CreateInstanceByApiRequest,
    DescribeInstanceOperationsRequest: DescribeInstanceOperationsRequest,
    DescribeInstanceRequest: DescribeInstanceRequest,
    SlowLogDetail: SlowLogDetail,
    ValueRange: ValueRange,
    Tag: Tag,
    DescribeInstanceStateResponse: DescribeInstanceStateResponse,
    InstanceOperation: InstanceOperation,
    InstanceSimpleInfoNew: InstanceSimpleInfoNew,
    DescribeSimpleInstancesRequest: DescribeSimpleInstancesRequest,
    DescribeErrorLogRequest: DescribeErrorLogRequest,
    ScaleUpInstanceResponse: ScaleUpInstanceResponse,
    DescribeInstanceInfoResponse: DescribeInstanceInfoResponse,

}
